﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ASPPanificadora.fabrica;
using NHibernate;
using ASPPanificadora.classes;
using NHibernate.Criterion;
using NHibernate.Linq;

namespace ASPPanificadora.controller
{
    public class UsuarioController : IUsuarioController
    {
        Fabrica fabrica = new Fabrica();
        public string Salvar(Usuario usuario)
        {
            return fabrica.SalvaUsuario(usuario);
        }

        public IList<Usuario> RecuperarUsuarios()
        {
            ISession sessao = fabrica.sessao();
            IList<Usuario> usuario = sessao.CreateCriteria<Usuario>().List<Usuario>();
            fabrica.fechaSessao();
            return usuario;
        }

        public Usuario PesquisarPorId(int id)
        {
            ISession sessao = fabrica.sessao();
            Usuario usuario = sessao.Query<Usuario>().Where(a => a.Id == id).Fetch(a => a.Funcionario).Fetch(a => a.TipoUsuario).FirstOrDefault();
            fabrica.fechaSessao();
            return usuario;
        }


        public int QtdeUsuarios()
        {
            ISession sessao = fabrica.sessao();
            int retorno = sessao.CreateCriteria<Usuario>().List<Usuario>().Count();
            fabrica.fechaSessao();
            return retorno;
        }

        public bool PesquisarPorNome(string nome, int id)
        {
            ISession sessao = fabrica.sessao();
            int qtdeUser = 0;
            if (id == 0)
                qtdeUser = sessao.Query<Usuario>().Where(a => a.Login.ToLower().Trim() == nome.Trim().ToLower()).Count();
            else
                qtdeUser = sessao.Query<Usuario>().Where(a => a.Login.ToLower().Trim() == nome.Trim().ToLower() && a.Id != id).Count();

            fabrica.fechaSessao();
            
            if (qtdeUser > 0)
                return true;
            else
                return false;
        }



        public Usuario PesquisarPorIdESenha(int idUsuario, string senhaUsuario)
        {
            ISession sessao = fabrica.sessao();
            Usuario usuario = sessao.Query<Usuario>().Where(a => a.Id == idUsuario && a.Senha == senhaUsuario).FirstOrDefault();
            fabrica.fechaSessao();
            if(usuario != null && usuario.Id != 0)
                return usuario;
            else
                return new Usuario();
        }
    }
}